Go管道阻塞、常见用法以及底层实现

您所在的位置:网站首页 go 协程 管道 Go管道阻塞、常见用法以及底层实现

Go管道阻塞、常见用法以及底层实现

2024-07-11 18:05| 来源: 网络整理| 查看: 265

Go管道阻塞、常见用法以及底层实现 channel数据结构一、管道状态二、阻塞2.1 什么时候发生阻塞?2.2 阻塞的本质? 三、常见错误四、管道常见用法4.1 单向管道4.2 select4.3 for-range

channel数据结构 type hchan struct { qcount uint //当前元素个数(len) dataqsiz uint //队列长度(cap) buf unsafe.Pointer //队列指针,指向队列内存位置 elemsize uint16 //单个元素大小 closed uint32 //标识通道状态 elemtype *_type //元素类型 sendx uint //下一个元素存放的位置 recvx uint //下一个元素读取的位置 recvq waitq //等待读消息的协程队列 sendq waitq //等待发消息的协程队列 lock mutex //互斥锁,保证不存在并发读写管道 //可以在GOROOT/src/runtime/chan.go里看到源码 } 一、管道状态

通过closed字段可知我们可以对管道是否关闭进行判断:

var ch=make(chan int) go func() { for i := 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3